BUG_ON(!(psr & IA64_PSR_CPL));
switch (vector) {
+ case 6:
+ vector = IA64_INST_KEY_MISS_VECTOR;
+ break;
+ case 7:
+ vector = IA64_DATA_KEY_MISS_VECTOR;
+ break;
case 8:
vector = IA64_DIRTY_BIT_VECTOR;
break;
u64 * pteval, u64 * itir, u64 * iha)
{
unsigned long region = address >> 61;
- unsigned long pta, rid, rr;
+ unsigned long pta, rid, rr, key = 0;
union pte_flags pte;
TR_ENTRY *trp;
region == 7 && ia64_psr(regs)->cpl == CONFIG_CPL0_EMUL) {
pte.val = address & _PAGE_PPN_MASK;
pte.val = pte.val | optf->im_reg7.pgprot;
+ key = optf->im_reg7.key;
goto out;
}
return is_data ? IA64_ALT_DATA_TLB_VECTOR :
/* found mapping in guest VHPT! */
out:
- *itir = rr & RR_PS_MASK;
+ *itir = (rr & RR_PS_MASK) | (key << IA64_ITIR_KEY);
*pteval = pte.val;
perfc_incr(vhpt_translate);
return IA64_NO_FAULT;